//引入公共函数
var util = require('../../utils/util');

//引入App
var app = getApp();

//声明存放页面实例的变量
var that;

//请求的域名URL
var requestDomain = util.config('requestDomain');

//页面page函数
Page({

  //页面公共函数
  data: {

    //商户ID
    storeId: '',
    
    //筛选菜单列表的关键字
    searchInputValue: '',

    //菜品类型列表数组
    foodTypeList: [],

    //请求菜品图片的URL
    foodPhotoRequestUrl: '',
    
    //存放菜单列表数据的数组
    foodMenuData: [],

    admin: false

  },

  /**
   * 页面初次加载时触发函数
   */

  onLoad: function (params) {

    //将页面实例赋给that
    that = this;

    //判断是否已存在storeId
    if(!util.globalData('storeId')) {
      
      //不存在storeId提示初始化失败
      util.showError('初始化失败', '初始化商店ID时出现问题，请重新进入本小程序');

      //跳出
      return;

    }

    //判断是否无修改菜单权限
    if(util.globalData('serviceAuth') == 'admin') {

      that.setData({admin: true});

    }

    //获取到商户ID
    that.data.storeId = util.globalData('storeId');

    //设置请求食物图片的字符串
    that.setData({foodPhotoRequestUrl: util.config('foodPhotoRequestUrl').replace('{storeId}', that.data.storeId)});

    //获得菜品列表数据并设置
    that.getFoodMenuData();

  },

  /**
   * 显示页面触发函数
   */

  onShow: function() {

    if(!util.status('connected')) {
        util.status('recryConnectDone', true);
        app.wsClose();
    }

  },

  /**
   * 隐藏页面触发函数
   */

  onHide: function() {

    //设置菜品搜索框的值为空字符串
    that.setData({searchInputValue: ''});
 
  },


  /**
   * 输入搜索内容执行搜索函数
   */

  searchInput: function(e) {

    //获取到当前搜索框内的内容
    var searchText = e.detail.value;
    
    //声明用于存放搜索结果的数组
    var searchResult = [];

    //获取公共的菜单数据
    var foodMenuData = util.globalData('foodMenuData');
    
    //遍历菜单数据
    for(var foodIndex in foodMenuData) {

      //判断当前遍历项是否包含了搜索内容或者当前遍历项的菜品类型是否等于搜索框内容
      if(foodMenuData[foodIndex].foodName.indexOf(searchText) != -1 || foodMenuData[foodIndex].foodType == searchText) {

        //往搜索结果数组放入当前遍历项
        searchResult.push(foodMenuData[foodIndex]);
      
      }
    }

    //设置搜索结果的菜单数组数据到菜单列表界面
    that.setData({foodMenuData: searchResult});
  
  },

  /**
   * 增加新菜品按钮点击触发
   */

  addFood: function() {
    console.log('触发增加菜品按钮');

    wx.showActionSheet({
        itemList: ['添加菜品', '添加物品'],
        success: function(result) {
            let {tapIndex} = result;
            if (tapIndex == 0) {
                //调用页面切换到处理菜品的界面并指定操作模式为添加菜品
                util.changePage('foodOpera', {
                    useMode: 'addFood'
                });
            }
            else if (tapIndex == 1) {
                //调用页面切换到处理菜品的界面并指定操作模式为添加菜品
                util.changePage('goodsOpera', {
                    useMode: 'addGoods'
                });
            }
        }
    });
  },

  /**
   * 修改菜品按钮点击触发
   */

  editFood: function(foodId) {
    console.log('修改菜品' + foodId);

    that.setData({searchInputValue: ''});

    //调用页面切换到处理菜品的界面并指定操作模式为修改菜品，需附加菜品ID
    util.changePage('foodOpera', {
      foodId: foodId,
      useMode: 'editFood'
    });

  },

  /**
   * 菜品删除函数
   */

  delFood: function(foodId) {
    
    //显示模态框询问是否删除菜品
    wx.showModal({
      title: '删除菜品',
      content: '您是否要删除这个菜品？',
      success: function(modal) {
        if(modal.confirm) {
          
          that.setData({searchInputValue: ''});
          
          //显示顶部加载图标
          wx.showNavigationBarLoading();

          console.log('删除菜品' + foodId);

          //发起删除菜品的请求
          wx.request({
            
            //删除菜品的接口URL
            url: requestDomain + 'food/del',

            //调用删除菜品接口的必须数据
            data: {

              //商户ID
              storeId: that.data.storeId,
              
              //验证身份的session
              _3rdSession: util.globalData('_3rdSession'),
              
              //菜品ID
              foodId: foodId,

              //指定存放菜品图片的文件夹方便顺便清除此菜品的图片
              foodPhotoFolder: util.config('foodPhotoFolder')
            
            },

            method: 'POST',

            //调用删除菜品接口成功
            success: function(result) {

              //判断是否调用成功
              if(util.checkSuccess(result)) {

                //获取到旧的菜单列表数据
                var oldFoodMenuData = util.globalData('foodMenuData');

                //用于存放删除了此菜品后的菜单列表数据
                var foodMenuData = [];

                //遍历旧菜单列表
                for(var foodIndex in oldFoodMenuData) {

                  //如果找到和刚删除的菜品ID一样的菜品数据忽略掉不添加进新的菜单列表
                  if(oldFoodMenuData[foodIndex].foodId == foodId) {
                    continue;
                  }

                  //往新的菜单列表添加未被删除的菜单项
                  foodMenuData.push(oldFoodMenuData[foodIndex]);

                }

                //将最新的菜单数据更新到公共菜单列表数据
                util.globalData('foodMenuData', foodMenuData);

                //将新的菜单列表更新到界面
                that.setData({foodMenuData: foodMenuData});

                //隐藏顶部加载图标
                wx.hideNavigationBarLoading();

              }
              else {

                //隐藏删除中的提示
                wx.hideToast();

                //显示删除失败的提示
                util.showError('删除菜品失败', '删除菜品时发生错误[' + result.data.errMsg + ']', result.data.errCode);

              }

            },

            //调用删除菜品接口失败
            fail: function() {

              //隐藏删除中的提示
              wx.hideToast();

              //显示删除失败的错误消息
              util.showError('删除菜品失败', '发起菜品删除操作请求时失败');

            }
          });
        }
      }
    });
    },

    /**
     * 菜品上架函数
     */

    pushFood: function(foodId) {

      //显示顶部加载图标
      wx.showNavigationBarLoading();
      console.log('上架菜品' + foodId);

      that.setData({searchInputValue: ''});

      //发起上架菜品的请求
      wx.request({
        
        //上架菜品的接口URL
        url: requestDomain + 'food/push',

        //调用上架菜品接口的必须数据
        data: {

          //商户ID
          storeId: that.data.storeId,
          
          //验证身份的session
          _3rdSession: util.globalData('_3rdSession'),
          
          //菜品ID
          foodId: foodId
        
        },

        method: 'POST',

        //调用上架菜品接口成功
        success: function(result) {

          //判断是否调用成功
          if(util.checkSuccess(result)) {

            //获取菜单列表数据
            var foodMenuData = util.globalData('foodMenuData');

            //遍历菜单列表
            for(var foodIndex in foodMenuData) {

              //如果找到和刚删除的菜品ID一样的菜品数据则修改此菜品的上下架状态为已上架
              if(foodMenuData[foodIndex].foodId == foodId) {
                foodMenuData[foodIndex].foodStatus = 'pushed';
              }

            }

            //将最新的菜单数据更新到公共菜单列表数据
            util.globalData('globalData', foodMenuData);

            //将新的菜单列表更新到界面
            that.setData({foodMenuData: foodMenuData});

            //隐藏顶部加载图标
            wx.hideNavigationBarLoading();

          }
          else {

            //隐藏上架中的提示
            wx.hideToast();

            //显示上架失败的提示
            util.showError('上架菜品失败', '上架菜品时发生错误[' + result.data.errMsg + ']', result.data.errCode);

          }

        },

        //调用上架菜品接口失败
        fail: function() {

          //隐藏上架中的提示
          wx.hideToast();

          //显示上架失败的错误消息
          util.showError('上架菜品失败', '发起菜品上架操作请求时失败');

        }
      });
  },

  /**
   * 菜品下架函数
   */

  pullFood: function(foodId) {

    //显示顶部加载图标
    wx.showNavigationBarLoading();

    that.setData({searchInputValue: ''});

    console.log('下架菜品' + foodId);
    
    //发起上架菜品的请求
    wx.request({
      
      //上架菜品的接口URL
      url: requestDomain + 'food/pull',

      //调用上架菜品接口的必须数据
      data: {

        //商户ID
        storeId: that.data.storeId,
        
        //验证身份的session
        _3rdSession: util.globalData('_3rdSession'),
        
        //菜品ID
        foodId: foodId
      
      },

      method: 'POST',

      //调用上架菜品接口成功
      success: function(result) {

        //判断是否调用成功
        if(util.checkSuccess(result)) {

          //获取菜单列表数据
          var foodMenuData = util.globalData('foodMenuData');

          //遍历菜单列表
          for(var foodIndex in foodMenuData) {

            //如果找到和刚删除的菜品ID一样的菜品数据则修改此菜品的上下架状态为已上架
            if(foodMenuData[foodIndex].foodId == foodId) {
              foodMenuData[foodIndex].foodStatus = 'pulled';
            }

          }

          //将最新的菜单数据更新到公共菜单列表数据
          util.globalData('globalData', foodMenuData);

          //将新的菜单列表更新到界面
          that.setData({foodMenuData: foodMenuData});

          //隐藏顶部加载图标
          wx.hideNavigationBarLoading();
          
        }
        else {

          //隐藏上架中的提示
          wx.hideToast();

          //显示上架失败的提示
          util.showError('下架菜品失败', '下架菜品时发生错误[' + result.data.errMsg + ']', result.data.errCode);

        }

      },

      //调用上架菜品接口失败
      fail: function() {

        //隐藏上架中的提示
        wx.hideToast();

        //显示上架失败的错误消息
        util.showError('上架菜品失败', '发起菜品上架操作请求时失败');

      }
    });
  },

  /**
   * 按下菜品右侧的功能按钮时触发
   */

  showFoodFun: function(e) {

    //从点击事件中获得菜品Id，原型：foodId-foodUseBtn
    var foodId = e.currentTarget.id.split('-')[0];

    //调用菜品搜索函数根据菜品Id找到对应的菜品数据
    var foodData = that.getFoodData(foodId);

    let itemList = [
      //菜品创建的时间
      '创建时间 ' + util.formatTime(new Date(parseInt(foodData.foodTimestamp) * 1000)),
    ];

    if(that.data.admin) {
        itemList = itemList.concat([

          //修改菜品按钮
          '修改菜品信息',
          
          //删除菜品按钮
          '删除此菜品',

          //上架/下架菜品按钮
          foodData.foodStatus == 'pulled' ? '上架此菜品' : '下架此菜品'

        ]);
    }

    //显示选择器供服务员选择操作
    wx.showActionSheet({

      //选择器的可选项数组
      itemList: itemList,

      //成功选择了某项后
      success: function(data) {
        switch(data.tapIndex) {
          case 1: 

            //选择了第一项修改菜品信息打开修改菜品页面
            that.editFood(foodId);

          break;
          case 2:

            //选择了第二项删除菜品
            that.delFood(foodId);

          break;
          case 3:

            //选择了第三项 判断当前上下架状态进行上架/下架操作
            if(foodData.foodStatus == 'pulled') {

              //上架菜品
              that.pushFood(foodId);

            }
            else {

              //下架菜品
              that.pullFood(foodId);

            }

          break;
        }
      }
    });
  },

  /**
   * 请求菜单数据并设置到菜单函数
   */

  getFoodMenuData: function() {

    //显示顶部加载图标
    wx.showNavigationBarLoading();

    //发起获取菜单数据请求
    wx.request({

      //返回菜单数据的接口
      url: requestDomain  + 'food/find',
      
      //请求接口必要的数据
      data: {
        storeId: that.data.storeId,
        _3rdSession: util.globalData('_3rdSession'),
        client: 'service'
      },

      method: 'POST', 

      //获取菜单数据请求成功
      success: function (result) {

        //隐藏顶部加载图标
        wx.hideNavigationBarLoading();

        //判断返回值是否是正确的操作
        if(util.checkSuccess(result)) {

          //更新菜单成功，判断是否存在对应数据
          if(result.data && result.data.data && result.data.data.foodMenuData && result.data.data.foodTypeList) {

            //获取到菜单数据
            var foodMenuData = result.data.data.foodMenuData;
            
            //存放到页面变量中
            that.data.foodTypeList = result.data.data.foodTypeList

            //将菜单按添加或更新时间排序
            foodMenuData.sort(function(a, b) {
              return b.foodTimestamp - a.foodTimestamp;
            });

            //转换菜单的菜品类型为正式名字
            for(var foodIndex in foodMenuData) {

              foodMenuData[foodIndex].foodTypeName = foodMenuData[foodIndex].foodType;
              foodMenuData[foodIndex].foodType = that.getFoodType(foodMenuData[foodIndex].foodType);

            }

            //设置菜单数据到菜单列表界面
            that.setData({foodMenuData: foodMenuData});

            //存放菜单类型列表到公共数据中
            util.globalData('foodTypeList', that.data.foodTypeList);

            //存放菜单数据到公共数据中
            util.globalData('foodMenuData', foodMenuData);

            wx.stopPullDownRefresh();

          }
        }
        else {

          //更新菜单失败，隐藏更新中的提示
          wx.hideToast();

          wx.stopPullDownRefresh();

          //显示更新失败的错误消息
          util.showError('更新菜单失败', '获取菜单列表时发生错误请重新进入本页面加载' + '[' + result.data.errMsg + ']', result.data.errCode);

        }
      },

      //请求菜单数据失败
      fail: function(err) {

        //隐藏更新中的提示
        wx.hideToast();

        wx.stopPullDownRefresh();

        //显示更新菜单失败的错误消息
        util.showError('更新菜单失败', '请求菜单列表时发生错误请重新进入本页面加载');

      }
    })
  },

  /**
   * 根据菜品Id获取对应的菜品数据
   */

  getFoodData: function(foodId) {

    //获取到公共的菜单数据
    var foodMenuData = util.globalData('foodMenuData');

    //遍历菜单数据
    for(var foodIndex in foodMenuData) {

      //查找是否有对应菜品Id的菜品数据
      if(foodMenuData[foodIndex].foodId == foodId) {

        //找到对应的菜品数据并返回
        return foodMenuData[foodIndex];

      }
    }
  },

  /**
   * 根据菜品类型名获取菜品类型函数
   */

  getFoodType: function(typeName) {
    
    //遍历菜品类型列表
    for(var typeIndex in that.data.foodTypeList) {
  
      //判断是否找到对应菜品类型名的类型对象
      if(that.data.foodTypeList[typeIndex].typeName == typeName) {
  
        //找到菜品类型并返回
        return that.data.foodTypeList[typeIndex].typeVal;
  
      }
  
    }
  
    //未找到对应的菜品类型直接返回空字符串
    return '';

  },

  onPullDownRefresh: function() {
    that.setData({ searchInputValue: '' });
    that.getFoodMenuData();
  }

})